home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Auge 4000
/
Auge 4000 #51 (1990-12-01)(Amiga User Gruppe Einzugsgebiet 4000).zip
/
Auge 4000 #51 (1990-12-01)(Amiga User Gruppe Einzugsgebiet 4000).adf
/
Msh
/
Hilfen
/
AMIGAtoIBM.mod
< prev
next >
Wrap
Text File
|
1990-12-01
|
3KB
|
116 lines
MODULE AMIGAtoIBM;
FROM InOut IMPORT Write, WriteInt, WriteLn, WriteString, ReadString;
FROM SYSTEM IMPORT ADR, ADDRESS;
FROM Exec IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
IMPORT Dos;
TYPE Kette = ARRAY [0..100] OF CHAR;
VAR lock, lock2 : Dos.FileLockPtr;
handle : Dos.FileHandlePtr;
Name, Name2 : Kette;
pointer : Dos.FileInfoBlockPtr;
wert, memblock, i, flag, oldPos, lesen, laenge, schreiben : LONGINT;
help : POINTER TO CHAR;
help2 : INTEGER;
BEGIN
REPEAT
WriteLn;
WriteString ("Dies Programm übersetzt die Umlaute von Amiga auf IBM");
WriteLn; WriteString ("Codierung."); WriteLn;
WriteString ("Ein Public Domain Programm von:");WriteLn;
WriteString ("G. Heeke, Eichendorffstr. 28, D-4047 Dormagen 5"); WriteLn;
WriteString ("Quelldatei: "); ReadString (Name);
(* Datei vorhanden?*)
lock := Dos.Lock (ADR(Name), Dos.sharedLock);
IF lock = 0 THEN
WriteLn;
WriteString ("Datei nicht vorhanden!");
END (*IF*);
UNTIL lock # 0;
(* Speicher für FileInfoBlock anfordern*)
pointer := AllocMem (SIZE(Dos.FileInfoBlock),MemReqSet {chip});
IF pointer = NIL THEN
WriteLn;
WriteString ("Nicht genügend Speicher");
HALT;
END;
flag := Dos.Examine (lock,pointer);
IF flag = 0 THEN WriteString ("Fehler!");HALT; END;
laenge := pointer^.size;
WriteLn;
WriteString ("Die Quelldatei ist ");
WriteInt (laenge,5);
WriteString (" Bytes lang.");
FreeMem (pointer, SIZE(Dos.FileInfoBlock));
REPEAT
WriteLn;
WriteString ("Zieldatei: "); ReadString (Name2);
WriteLn;
lock2 := Dos.Lock (ADR(Name2), Dos.exclusiveLock);
IF lock2 # 0 THEN
WriteString ("Die Datei existiert schon!");
Dos.UnLock (lock2);
END;
UNTIL lock2 = 0;
(*Datei öffnen *);
handle := Dos.Open (ADR(Name),Dos.oldFile);
IF handle = 0 THEN
WriteLn;
WriteString (" Datei existiert nicht! Merkwürdig!??");
HALT;
END;
(* Datei Zeiger an Anfang*);
oldPos := Dos.Seek (handle, 0, Dos.current);
(*Speicher für Dateiinhalt bereitstellen*)
memblock := LONGINT(AllocMem (laenge,MemReqSet {public}));
IF memblock = 0 THEN
WriteLn;
WriteString ("Nicht genug Speicher!");
HALT;
END;
(*Datei lesen*)
lesen := Dos.Read (handle,memblock,laenge);
Dos.Close (handle);
Dos.UnLock (lock);
(*Dateiinhalt änder*)
wert := memblock;
FOR i := 0 TO laenge DO
help := ADDRESS (wert);
help2 := ORD(help^);
CASE help2 OF
167: help^ := CHR(021)|
196: help^ := CHR(142)|
214: help^ := CHR(153)|
220: help^ := CHR(154)|
228: help^ := CHR(132)|
246: help^ := CHR(148)|
252: help^ := CHR(129)|
223: help^ := CHR(225)|
ELSE;
END;
INC (wert);
END (*FOR*);
(*Zieldatei schreiben*)
handle := Dos.Open (ADR(Name2),Dos.newFile);
schreiben := Dos.Write (handle, memblock, laenge);
Dos.Close (handle);
Dos.UnLock (lock2);
FreeMem (memblock,laenge);
WriteLn;
WriteString ("Das war's.");
END AMIGAtoIBM.